package br.gov.sjc.socialalimenta;

import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.TimeZone;
import br.org.sjc.validacao.Sair;
import android.app.AlertDialog;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;

/**
 * @author rodrigo.ramos
 *
 */
public class ConfigurarActivity extends Sair {
	String TAG = "ConfigurarActivity";
	static int ID = 1;
	
	//Declara base de dados
	public static SQLiteDatabase BancoDados = null;
	public static String nomeBanco = "SocialAlimenta";
	public void openDB(){
		try{
			BancoDados = openOrCreateDatabase(nomeBanco,MODE_WORLD_READABLE,null);
			Log.v(TAG, "BancoDados.openOrCreateDatabase();");
		}catch (Exception E){
			Log.e(TAG, "Erro em BancoDados.close();"+E.getMessage());
		} 
	}
	public void closeDB(){
		BancoDados.close();
		Log.v(TAG, "BancoDados.close();");
	}

	// Declara Buttons
	Button btVoltar, btSalvar;
	EditText etNome,  etObs;
	//EditText etMatricula;
	Spinner spPP, spMatricula;
	
	//Declara Cursor
	Cursor cVerifica;
	
	/** Called when the activity is first created. *******************************************/
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.configuracao);
		registerBaseActivityReceiver();
		Log.v(TAG, "Inicio configuracao ");
		openDB();
		
		etNome = (EditText) findViewById(R.confs.etNome);
		//etMatricula = (EditText) findViewById(R.confs.etMatricula);
		etObs = (EditText) findViewById(R.confs.etObs);
		spMatricula = (Spinner) findViewById(R.confs.spMatricula);
		spPP = (Spinner) findViewById(R.confs.spPP);
		btVoltar = (Button)findViewById(R.confs.btVoltar);
		btSalvar = (Button)findViewById(R.confs.btSalvar);
		
        ArrayAdapter<CharSequence> adpPP = ArrayAdapter.createFromResource(
        this, R.array.PlacaPatrimonial,
        android.R.layout.simple_spinner_item);
        adpPP.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spPP.setAdapter(adpPP);
        
        ArrayAdapter<CharSequence> adpMatricula = ArrayAdapter.createFromResource(
        this, R.array.Entrevistadores,
        android.R.layout.simple_spinner_item);
        adpMatricula.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spMatricula.setAdapter(adpMatricula);
		
		setarDados();
		Log.v(TAG, "onCreate() ");
		
		/** Acao do botao Voltar */
		btVoltar.setOnClickListener(new View.OnClickListener() {
			public void onClick(View arg0) {
				/** InitComponents */
				Intent ittNVoltar = new Intent(getApplicationContext(), SocialAlimenta2Activity.class);
				closeDB();
				startActivity(ittNVoltar);
			}
		});//fim acao do botao voltar

		/** Acao do botao Prox */
		btSalvar.setOnClickListener(new View.OnClickListener() {
			public void onClick(View arg0) {
				//Valida os campos e dá prosseguimento
				validaRegistro();
			}
		});//fim acao do botao Prox
	}
	protected void validaRegistro() {
		// valida registros antes de serem persistidos na tabela
		int erro = 0;
		
/*		if(etNome.getText().toString().equals("")){
			Toast.makeText(this, "Campo Nome está Vazio", Toast.LENGTH_LONG).show();
			erro++;
		}*/
		
		if (erro == 0) {

			if (verificaRegistro()){
				alteraRegistro(ID);
			}else{
				Log.w(TAG,"validaRegistro NOVO ");
				//salva dados
				salvaDados(etNome.getText().toString(),spMatricula.getSelectedItem().toString(),etObs.getText().toString(),spPP.getSelectedItem().toString());
				//Toast.makeText(this, "Gravando Dados de Configurações", Toast.LENGTH_LONG).show();
				 Toast toast= Toast.makeText(getApplicationContext(), "Gravando Dados de Configurações", Toast.LENGTH_SHORT);         
			      toast.setGravity(Gravity.TOP, 0, 70);
			      toast.show();

			}
			/** 
			 * InitComponents ----- 
			 * */
			Intent ittNIr = new Intent(getApplicationContext(),SocialAlimenta2Activity.class);
			closeDB();
			startActivity(ittNIr);
		}
	}
	
	public boolean verificaRegistro(){
		boolean Retorno = false;
		try{
			/**
			 * Não gravará Histórico de quem usou o tablet.
			 */
			String SQLQuery = "Select * from tab_SocialA_Configuracao WHERE _id="+ID;
			cVerifica = BancoDados.rawQuery(SQLQuery, null);
			if (cVerifica.getCount() !=0 ){
				cVerifica.moveToFirst();
				//ID = cVerifica.getInt(cVerifica.getColumnIndex("_id"));
				Retorno = true;
				Log.i(TAG, "verificaRegistro() TRUE ");
			}else{
				Log.e(TAG, "verificaRegistro() false ");
				//Necessário Inserir dados
			}
		}catch (Exception Err){
			//mensagemAlerta("Erro","Erro Encontrado:"+Err.getMessage());
			Log.e(TAG, "verificaRegistro() "+Err.getMessage());
		}
		return Retorno;

	}
	
	public void setarDados(){
		try {
			String SQL2 = "SELECT * FROM tab_SocialA_Configuracao WHERE _id="+ID;
			Log.v(TAG, "setarDados() _id: "+ID);
			Cursor c = BancoDados.rawQuery(SQL2, null);
			c.moveToFirst();

			do {
				etNome.setText(c.getString(c.getColumnIndex("Nome")));
				//etMatricula.setText(c.getString(c.getColumnIndex("Matricula")));
				etObs.setText(c.getString(c.getColumnIndex("Obs")));
				
    	        //spPP
    			ArrayAdapter<CharSequence> adpUPP = ArrayAdapter.createFromResource(
    			        this, R.array.PlacaPatrimonial,
    			        android.R.layout.simple_spinner_item);
    			adpUPP.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    			int iUPP = adpUPP.getPosition(c.getString(c.getColumnIndex("PlacaPatrimonial")));
    			spPP.setSelection(iUPP);
    			
    	        //spMatricula
    			ArrayAdapter<CharSequence> adpUMatricula = ArrayAdapter.createFromResource(
    			        this, R.array.Entrevistadores,
    			        android.R.layout.simple_spinner_item);
    			adpUMatricula.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    			int iUMatricula = adpUMatricula.getPosition(c.getString(c.getColumnIndex("Matricula")));
    			spMatricula.setSelection(iUMatricula);
   			}while(c.moveToNext());

			Log.v(TAG, "setarDados() TRUE ");
		}catch (Exception E){
			mensagemAlerta("Erro","Ocorreu um erro inesperado");
			Log.e(TAG, "Erro em setarDados() "+E.getMessage());
		}
	}
    public void alteraRegistro(int id){
    	try{
    		String uSQL = "UPDATE tab_SocialA_Configuracao SET " +
    				" PlacaPatrimonial='"+spPP.getSelectedItem().toString()+"'," +
    				" Nome='"+etNome.getText().toString()+"'," +
    				" Matricula='"+spMatricula.getSelectedItem().toString()+"'," +
    				" Obs='"+etObs.getText().toString()+"'," +
    				" Data='"+dataHoje()+"'" +
    				" WHERE _id="+id+" ";
    		BancoDados.execSQL(uSQL);
    		//Toast.makeText(ConfigurarActivity.this, "Alterado", Toast.LENGTH_LONG).show();
			 Toast toast= Toast.makeText(getApplicationContext(), "Gravando Dados de Configurações", Toast.LENGTH_SHORT);         
		     toast.setGravity(Gravity.TOP, 0, 70);
		     toast.show();
    		Log.v(TAG, "alteraRegistro() realizado com sucesso ");
    	}catch(Exception Err){
    		mensagemAlerta("Erro","Ocorreu um erro inesperado");
    		Log.e(TAG, "alteraRegistro() erro: "+Err.getMessage());
    		
    	}
    	
    }

	public void mensagemAlerta(String AlertTitle, String MSGAlert){
		AlertDialog.Builder Mensagem = new AlertDialog.Builder(ConfigurarActivity.this);
		Mensagem.setTitle(AlertTitle);
		Mensagem.setMessage(MSGAlert);
		Mensagem.setNeutralButton("Ok", null);
		Mensagem.show();
	}
	
	private void salvaDados(String string, String string2, String string3,
			String string4) {
		try{

			String SQL = "INSERT INTO tab_SocialA_Configuracao(Nome,Matricula,Obs,PlacaPatrimonial, Data) "+
					"VALUES ('"+string+"', "+string2+",'"+string3+"', '"+string4+"','"+dataHoje()+"')";
			BancoDados.execSQL(SQL);
			Log.v(TAG, "salvaDados passou;");
		}catch(Exception erro) {
			
			Log.e(TAG, "BancoDados.erro"+erro.getMessage());
		}
	}
	public String dataHoje(){

		Calendar cal = new GregorianCalendar(TimeZone.getTimeZone("GMT -3"));
		int ano = cal.get(Calendar.YEAR);
		int mes = cal.get(Calendar.MONTH);
		int dia = cal.get(Calendar.DAY_OF_MONTH);
		String data =  String.valueOf(dia) + "-"+ String.valueOf(mes+1) + "-" + String.valueOf(ano);

		return data;
	}
	@Override
	protected void onResume() {
		//quando a Activity main receber o foco novamente abre-se novamente a conexão
		openDB();
		//método responsável pela atualiza da lista de dados na tela
		//adapter.notifyDataSetChanged();
		super.onResume();
	}
	@Override
	protected void onPause() {

		//toda vez que o programa peder o foco fecha-se a conexão com o BD
		closeDB();
		super.onPause();
	}
    @Override
    protected void onDestroy() {
    	super.onDestroy();
    	unRegisterBaseActivityReceiver();
    	finish();
    }
}
